#ifndef TABLERO_H
#define TABLERO_H

#include<iostream>
#include "casillero.h"
#include "admarchi.h"

#define POS_X 100
#define POS_Y 100

#define ANCHO_COL 30
#define ALTO_FILA 30

#define CANT_COL 20
#define CANT_FILAS 10
#define CANT_MINAS 10

typedef struct t_casillero
{
	int col;
	int fila;
	int num;
	bool oculto;
	bool flag;
};

typedef t_casillero ty_vec_status[CANT_COL * CANT_FILAS];

FILE* abrir_arch(const char * rutaynombre, const char * modo);
bool arch_existe(const char * rutaynombre);

//representa un tablero
class Tablero
{
private:
	int _pos_x;
	int _pos_y;
	int _cant_col;
	int _cant_filas;
	int _ancho_col;
	int _alto_fila;
	int _cant_minas;
	int _minas_restantes;
	bool _juego_perdido;
	int _current_time;
	int _celdas_reveladas;
	Casillero * _casilleros[CANT_COL][CANT_FILAS];
public:
	Tablero(int cols, int filas, float mine_density);
	~Tablero();
	int get_pos_x();
	void set_pos_x(int pos_x);
	int get_pos_y();
	void set_pos_y(int pos_y);
	int get_cant_col();
	void set_cant_col(int cant_col);
	int get_cant_filas();
	void set_cant_filas(int cant_filas);
	int get_ancho_col();
	void set_ancho_col(int ancho_col);
	int get_alto_fila();	
	void set_alto_fila(int alto_fila);
	int get_current_time();
	int get_cant_minas();
	int get_cant_reveladas();
	void get_status(ty_vec_status status);
	int get_minas_restantes();
	void set_minas_restantes(int minas_restantes);
	void update_status(ty_vec_status status);
	void set_current_time(int current_time);
	void set_minas();
	void calcular_numeros();
	bool is_valid(int x, int y);
	int get_right_bound();
	int get_bottom_bound();
	bool is_juego_perdido();
	void set_juego_perdido(bool juego_perdido);
	void revelar(int col, int fila);
	void revelar_tablero();
	void update_reveladas();
	void reset_tablero();
	void flag_casillero(int col, int fila);
	void dibujar();
};
#endif
